#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "TMensaje.h"

int Mensaje_Crear(TMensaje* mensaje, TDireccion destino, char* texto, int prioridad, TPuerto puerto) {
	TTipoMensaje prioritario;

	mensaje->tam = strlen(texto);
	if (mensaje->tam <= 0) {
		return MENSAJE_ERR_STRVACIO;
	}

	mensaje->texto = malloc(mensaje->tam + 1);
	if (!(mensaje->texto)) {
		return MENSAJE_ERR_MEMORIA;
	}

	if (prioridad) {
	    prioritario = PRIORITARIO;
	}
	else {
		prioritario = NO_PRIORITARIO;
	}

	mensaje->prioridad = prioritario;
	mensaje->puerto = puerto;
	mensaje->destino = destino;

	strcpy(mensaje->texto, texto);

	#ifdef __DEBUG__
	printf("Mensaje_Crear:\n mensaje->texto = %s\n",mensaje->texto);
	#endif

	return MENSAJE_OK;
}

int Mensaje_Destruir(TMensaje* mensaje) {
	mensaje->tam = -1;
	mensaje->prioridad = -1;
	mensaje->puerto = -1;
	mensaje->destino = -1;
	if (mensaje->texto)
		free(mensaje->texto);
	return MENSAJE_OK;
}

int Mensaje_ObtenerDireccion(TMensaje* mensaje, TDireccion* direccion) {
	*direccion = mensaje->destino;
	return MENSAJE_OK;
}

int Mensaje_ObtenerTexto(TMensaje* mensaje, char** texto) {
	/*if(!(*texto = malloc(mensaje->tam + 1)))
		return MENSAJE_ERR_MEMORIA;*/
	strcpy(*texto, mensaje->texto);
	return MENSAJE_OK;
}

int Mensaje_ObtenerTamanioMensaje(TMensaje* mensaje, int* tamanio) {
	*tamanio = mensaje->tam;
	return MENSAJE_OK;
}

TTipoMensaje Mensaje_ObtenerPrioridad(TMensaje* mensaje) {
	return mensaje->prioridad;
}

TPuerto Mensaje_ObtenerPuerto(TMensaje* mensaje) {
	return mensaje->puerto;
}

int Mensaje_CambiarPrioridad(TMensaje* mensaje, TTipoMensaje nueva_prioridad) {
	mensaje->prioridad = nueva_prioridad;
	return MENSAJE_OK;
}
